import { useApiDictionary } from '../../context';
import { useImmutableQuery } from '../../hooks/query/useImmutableQuery';
import { Country, CountryList, ResponseType } from './types';

/* -------------------------------------------------------------------------- */
/*                                    HOOK                                    */
/* -------------------------------------------------------------------------- */

export const useRequest = () => {
  const { countryApi } = useApiDictionary();

  const { data, error, isLoading, mutate, refresh } = useImmutableQuery<CountryList, ResponseType>(
    'country',
    countryApi.get,
    prepareData,
    {
      loading: `Рейтинг стран мира по количеству патентов в 2012 г. загружаются`,
      got: `Рейтинг стран мира по количеству патентов в 2012 г. получены`,
      updated: `Рейтинг стран мира по количеству патентов в 2012 г. обновлены`,
      error: `С загрузкой рейтинга стран мира по количеству патентов в 2012 г. произошла ошибка`,
    }
  );

  return {
    countryList: data,
    error,
    isLoading,
    mutate,
    refresh,
  };
};

/* -------------------------------------------------------------------------- */
/*                                   / HOOK                                   */
/* -------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------- */
/*                                TRANSFORMERS                                */
/* -------------------------------------------------------------------------- */

const prepareData = (countryList: ResponseType): CountryList => countryList.map(prepareCountry);

const prepareCountry = ({ residentRequests, nonResidentRequests, ...country }: ResponseType[number]): Country => ({
  ...country,
  residentRequests,
  nonResidentRequests,
  allRequests: residentRequests + nonResidentRequests,
});

/* -------------------------------------------------------------------------- */
/*                               / TRANSFORMERS                               */
/* -------------------------------------------------------------------------- */
